const express = require('express');
const xlsx = require("node-xlsx");
const uuid = require("node-uuid");
const Pro = require("../sql/collection/Pro");
const sql = require('../sql');
const router = express.Router();

/* GET pro listing. */
router.get('/', function (req, res, next) {
  // 获取数据库商品数据
  let { limit, count } = req.query;
  limit = limit * 1 || 10; // 每页的商品数量    默认为10条数据  Number
  count = count * 1 || 1;  //  当前页          默认为第一页    Number
  sql.find(Pro, {}, { _id: 0 }).then((data) => {
    let counts = Math.ceil(data.length / limit); // 总页数
    sql.page(Pro, {}, { _id: 0 }, limit, count).then((data) => {
      // 发送给前端的数据
      res.render('pro', {
        activeIndex: "2",
        data, // 每页的数据
        counts,      // 总页数
        count,       // 当前页
        limit,      //每页显示的条数
        role: req.session.role,
        adminname: req.session.adminname
      });
    })
  })

});
// 添加商品路由
router.get('/add', (req, res, next) => {
  res.render("pro_add", {
    activeIndex: "2",
    role: req.session.role,
    adminname: req.session.adminname
  });
})
// 增加商品功能
router.post("/addAction", (req, res, next) => {
  // 接收前端发送的数据并解析为对象 post使用body解析
  let obj = req.body;
  // 修改数据类型      接受的数据为字符型数据
  obj.price *= 1;
  obj.stock *= 1;
  obj.sales *= 1;
  obj.discount *= 1;
  obj.grade *= 1;
  // 生成一个商品ID
  obj.proid = "pro_" + uuid.v1();
  // 插入数据
  sql.insert(Pro, obj).then(() => {
    // 重定向到'/pro'
    res.redirect("/pro");
  })
})
// 删除商品功能
router.get("/deleteAction", (req, res, next) => {
  // 接收前端发送的数据并解析为对象 get使用query解析
  let obj = req.query;
  // 删除数据
  sql.delete(Pro, obj).then(() => {
    // 重定向到'/pro'
    res.redirect("/pro");
  })
})
// 修改商品功能
router.get("/update", (req, res, next) => {
  // 接收前端发送的数据并解析为对象 get使用query解析
  let obj = req.query;
  // 查找数据
  sql.find(Pro, obj, { _id: 0 }).then((data) => {
    // 返回给前端查询到的数据
    res.render("pro_update", {
      activeIndex: "2",
      role: req.session.role,
      adminname: req.session.adminname,
      proid: data[0].proid,
      proname: data[0].proname,
      prokind: data[0].prokind,
      brand: data[0].brand,
      logo: data[0].logo,
      proimg: data[0].proimg,
      price: data[0].price,
      info: data[0].info,
      stock: data[0].stock,
      sales: data[0].sales,
      discount: data[0].discount,
      grade: data[0].grade
    });
  })
})
// 提交修改商品信息
router.post("/updateAction", (req, res, next) => {
  // 接收前端发送的数据并解析为对象 post使用body解析
  let obj = req.body;
  // 修改数据类型      接受的数据为字符型数据
  obj.price *= 1;
  obj.stock *= 1;
  obj.sales *= 1;
  obj.discount *= 1;
  obj.grade *= 1;
  // 插入数据
  sql.update(Pro, { proid: obj.proid }, obj).then(() => {
    // 重定向到'/pro'
    res.redirect("/pro");
  })
})
// 排序
router.get('/sort', (req, res, next) => {
  let { type, num } = req.query;
  num = num * 1;
  sql.sort(Pro, {}, { _id: 0 }, { [type]: num }).then((data) => {
    res.render("pro", {
      activeIndex: "2",
      role: req.session.role,
      adminname: req.session.adminname,
      data, // 每页的数据
      counts: 1,      // 总页数
      count: 1,       // 当前页
      limit: data.length  //每页显示的条数
    });
  })
})
// 搜索
router.get("/search", (req, res, next) => {
  // 获取搜索字段 商品名称 或  商品描述
  let { searchText } = req.query;
  let reg = new RegExp(searchText);
  sql.find(Pro, { $or: [{ proname: reg }, { info: reg }] }, { _id: 0 }).then((data) => {
    res.render("pro", {
      activeIndex: "2",
      role: req.session.role,
      adminname: req.session.adminname,
      data, // 每页的数据
      counts: 1,      // 总页数
      count: 1,       // 当前页
      limit: data.length  //每页显示的条数
    });
  })
})
// 上传数据路由（数据库）
// xlsl 数据地址
const file = __dirname + '/pro.xlsx';
// 用于存放所有商品信息的容器
let dataList = [];
router.get('/upload', (req, res, next) => {
  // 解析EXCEL数据
  let datas = xlsx.parse(file);
  let data = datas[0].data;
  // 遍历数据向容器内添加商品信息
  data.forEach((val, index) => {
    // 过滤掉表头
    if (index > 0) {
      dataList.push({
        proid: "pro_" + uuid.v1(),
        proname: val[1],
        prokind: val[2],
        brand: val[3],
        logo: val[4],
        proimg: val[5],
        price: val[6] * 1,
        info: val[7],
        stock: val[8] * 1,
        sales: val[9] * 1,
        discount: val[10] * 1,
        grade: val[11] * 1
      });
    }
  });
  // 清空数据库（防止多次上传数据，上传前先清空）
  sql.delete(Pro, {}, 1).then(() => {
    // 向数据库插入数据
    sql.insert(Pro, dataList).then(() => {
      res.redirect("/pro");
    });
  });
});
module.exports = router;
